""" Значение многочлена 🌶️
Многочленом степени nn называется выражение вида 
a_nx^n + a_{n-1}x^{n-1}+\ldots + a_2x^2+a_1x+a_0
a 
n
​
 x 
n
 +a 
n−1
​
 x 
n−1
 +…+a 
2
​
 x 
2
 +a 
1
​
 x+a 
0
​
 
где a_n, \, a_{n-1}, \ldots , a_2, \, a_1,\, a_0a 
n
​
 ,a 
n−1
​
 ,…,a 
2
​
 ,a 
1
​
 ,a 
0
​
  — коэффициенты многочлена (a_n \neq 0a 
n
​
 

=0).

На вход программе на первой строке подаются коэффициенты многочлена, разделенные символом пробела и целое число xx на второй строке. Напишите программу, которая вычисляет значение указанного многочлена при заданном значении xx.

Формат входных данных
На вход программе на первой строке подаются коэффициенты многочлена (целые числа), разделенные символом пробела и целое число xx на второй строке.

Формат выходных данных
Программа должна вывести одно число — значение указанного многочлена при заданном значении xx.

Примечание 1. Первый тест задает многочлен 2x^2+4x+32x 
2
 +4x+3, второй тест задает многочлен x^6+2x^5+3x^4+4x^3+5x^2+6x+7x 
6
 +2x 
5
 +3x 
4
 +4x 
3
 +5x 
2
 +6x+7.

Примечание 2. Решение задачи необходимо оформить в виде функции evaluate(coefficients, x), которая принимает список коэффициентов и значение аргумента. Функция evaluate() должна быть реализована на основе встроенных функций map() и reduce().

Примечание 3. Не забудьте вызвать функцию evaluate(), чтобы вывести результат 😀. """

from functools import reduce

def evaluate (x:int(),*coefficients):
    sq = [x**i for i in range(len (coefficients)-1,0,-1)]
    sq.append(0)
    total =0
    v=reduce(lambda x,y: y+x,
             map(lambda y,z: y*max(z,1),
                 coefficients,sq),
                 total)
    print(v)
     
if __name__=='__main__':
    args: list = map(int,input().split())      
    x: int = int(input())

    evaluate(x,*args)

